CodeCommit でブランチごとにアクセス制御できるアクションを教えてください
困っていた内容
AWS 公式ブログを参考に、CodeCommit でブランチごとのアクセス制御を検討しています。
どのようなアクションがブランチごとの制御に対応しているかがわからないので、CodeCommit でブランチごとにアクセス制御できるアクションを教えてください。
どう対応すればいいの?
2022 年 9 月時点では、以下のアクションがブランチレベルでのアクセス制御の対象です。
・CreateBranch
・CreateCommit
・CreateUnreferencedMergeCommit
・DeleteBranch
・DeleteFile
・GetMergeCommit
・GitPush
・MergeBranchesByFastForward
・MergeBranchesBySquash
・MergeBranchesByThreeWay
・MergePullRequestByFastForward
・MergePullRequestBySquash
・MergePullRequestByThreeWay
・PutFile
サンプルのポリシーについては、AWS 公式ドキュメントでも紹介されています。
例えば、このポリシーは、コミットのプッシュ、ブランチのマージ、 ブランチの削除、 プルリクエストのマージ、および MyDemoRepo という名前のリポジトリの main というブランチと prod というブランチへのファイルの追加を拒否します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codecommit:GitPush", "codecommit:DeleteBranch", "codecommit:PutFile", "codecommit:MergeBranchesByFastForward", "codecommit:MergeBranchesBySquash", "codecommit:MergeBranchesByThreeWay", "codecommit:MergePullRequestByFastForward", "codecommit:MergePullRequestBySquash", "codecommit:MergePullRequestByThreeWay" ], "Resource": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo", "Condition": { "StringEqualsIfExists": { "codecommit:References": [ "refs/heads/main", "refs/heads/prod" ] }, "Null": { "codecommit:References": "false" } } } ] }
上記の通り、CodeCommit では、特定のアクションについては、条件キー codecommit:References
がサポートされており、こちらを利用することでブランチレベルでのアクセス制御が可能となります。
どのアクションで条件キー codecommit:References
がサポートされているかは、こちらの AWS 公式ドキュメントで確認できます。
ただし、今後のアップデートでサポートされるアクションが増える可能性はあるので、気になる場合は AWS のアップデート情報やドキュメントの英語版を定期的に確認してください。